
/**
 * 字符串或数字不损失精度地转化成1位小数
 * @param {number | string} value 
 */
function fixedOneFloat(value) {
  return Math.abs(parseFloat(value).toString() == 'NaN' ? '' : parseFloat(value).toFixed(1)).toFixed(1);
}

/**
 * 字符串或数字不损失精度地转化成2位小数
 * @param {number | string} value 
 */
function fixedTwoFloat(value) {
  return Math.abs(parseFloat(value).toString() == 'NaN' ? '' : parseFloat(value).toFixed(2)).toFixed(2);
}

/**
 * 字符串或数字不损失精度地转化成3位小数
 * @param {number | string} value 
 */
function fixed3Float(value) {
  return Math.abs(parseFloat(value).toString() == 'NaN' ? '' : parseFloat(value).toFixed(3)).toFixed(3);
}


// 字符串或数字转化成整数
function fixedInt(value) {
  return Math.abs(parseInt(value).toString() == 'NaN' ? '' : parseInt(value));
}

/**
 * 数字或字符串通过 乘100的方式 转化成 100倍正整数
 * @param {number | string} value 
 */
function timesHundredIntFixed(value) {
  return Math.abs(+(parseFloat(value) * 100).toFixed());
}

/**
 * 数字或字符串通过 乘1000的方式 转化成 1000倍正整数
 * @param {number | string} value 
 */
function times3IntFixed(value) {
  return Math.abs(+(parseFloat(value) * 1000).toFixed());
}

/**
 * 正整数通过 除以100的方式 转化成 0.01倍 2位小数
 * @param {number | string} value 
 */
function divide2Float2Fixed(value) {
  return Math.abs(parseFloat(value) / 100).toFixed(2);
}

/**
 * 正整数通过 除以1000的方式 转化成 0.001倍 3位小数
 * @param {number | string} value 
 */
function divide3Float3Fixed(value) {
  return Math.abs(parseFloat(value) / 1000).toFixed(3);
}

/**
 * 一个2位小数和一个整数相乘，返回乘积，精度为两位小数
 * @param {number | string} twoFixedFloatNumber 2位或以上小数或数字字符串
 * @param {number | string} intNumber 正整数或数字字符串
 */
function timesTwoFixedFloatInt(twoFixedFloatNumber, intNumber) {
  twoFixedFloatNumber = timesHundredIntFixed(twoFixedFloatNumber);
  return divide2Float2Fixed(twoFixedFloatNumber * intNumber);
}

/**
 * 一个3位小数和一个整数相乘，返回乘积，精度为三位小数
 * @param {number | string} fixed3FloatNumber 3位或以上小数或数字字符串
 * @param {number | string} intNumber 正整数或数字字符串
 */
function times3FixedFloatInt(fixed3FloatNumber, intNumber) {
  fixed3FloatNumber = times3IntFixed(fixed3FloatNumber);
  return divide3Float3Fixed(fixed3FloatNumber * intNumber);
}

export {
  fixedOneFloat,
  fixedTwoFloat,
  fixed3Float,
  fixedInt,
  times3IntFixed,
  timesHundredIntFixed,
  divide2Float2Fixed,
  divide3Float3Fixed,
  timesTwoFixedFloatInt,
  times3FixedFloatInt
}